# 目录定义
SRCDIR := src
INCDIR := include
OBJDIR := obj

# 获取所有源文件
srcs := $(wildcard $(SRCDIR)/*.c)
# 转换为目标文件路径 (src/foo.c -> obj/foo.o)
objs := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(srcs))

# 主目标：main (依赖所有.o文件)
main: $(objs)
	gcc $^ -o $@ -lpthread

# 模式规则：编译.o文件
# 注意：$@ 是 obj/xxx.o, $< 是 src/xxx.c
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
	gcc -c $< -o $@ -g -I$(INCDIR)

# 自动创建目标文件目录
$(OBJDIR):
	mkdir -p $@

# 清理
clean:
	$(RM) -r $(OBJDIR) main

# 重新构建
rebuild: clean main

.PHONY: clean rebuild